package org.alanlau.cloud.consumermoviefeign.feign;

import feign.Logger;
import org.alanlau.cloud.consumermoviefeign.entity.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * Feign客户端
 *
 * @author liukun
 * @version 1.0
 * @date 2019/10/9 16:45
 */
@FeignClient(name = "provider-user")
public interface UserFeignClient {

    /**
     * 查找用户
     * @author liukun
     * @date 2019/10/9 16:46
     * @param id  用户ID
     * @return  org.alanlau.cloud.consumermoviefeign.entity.User
     */
    @GetMapping("/users/{id}")
    User findById(@PathVariable("id") Long id);

    /**
     * 该Feign Client的配置类，注意：
     * 1. 该类可以独立出去；
     * 2. 该类上也可添加@Configuration声明是一个配置类；
     * 配置类上也可添加@Configuration注解，声明这是一个配置类；
     * 但此时千万别将该放置在主应用程序上下文@ComponentScan所扫描的包中，
     * 否则，该配置将会被所有Feign Client共享，无法实现细粒度配置！
     *
     * 个人建议：像我一样，不加@Configuration注解
     * @author liukun
     * @date  2019/10/9 17:05
     * @version 1.0 TODO
     */
    class UserFeignConfig{
        @Bean
        public Logger.Level logger(){
            return Logger.Level.FULL;
        }
    }
}
